1 module unde.games.dizzy.omega.animations.bag_bug_anim; 2 3 import derelict.opengl3.gl; 4 5 import std.conv; 6 import unde.games.dizzy.omega.bug; 7 import unde.games.object; 8 import unde.games.renderer; 9 import unde.global_state; 10 11 class BagBugAnim:GameObject 12 { 13 enum SPEED = 0.05; 14 enum G = 0.015; 15 enum MAX_V = 0.05; 16 enum JUMP_V = 0.1; 17 18 long frame = -1; 19 int stage; 20 21 Bug bug; 22 float dz = 0.0; 23 24 this(MainGameObject root) 25 { 26 bug = new Bug(root, [302.6, 34.4, 3.0], "solid"); 27 bug.dx = -SPEED; 28 models["bag"] = root.models["bag"]; 29 super(root); 30 } 31 32 void start() 33 { 34 if (frame < 0) frame = 0; 35 } 36 37 override void draw(GlobalState gs) 38 { 39 if (frame >= 0 && bug.x > 284.0) 40 { 41 bug.draw(gs); 42 43 glPushMatrix(); 44 glTranslatef(bug.x, bug.y+0.5, bug.z); 45 recursive_render(gs, models["bag"]); 46 glPopMatrix(); 47 } 48 } 49 50 override bool tick(GlobalState gs) 51 { 52 if (frame >= 0 && bug.x > 284.0) 53 { 54 frame++; 55 bug.x += bug.dx; 56 bug.y += bug.dy; 57 bug.z += dz; 58 59 switch(stage) 60 { 61 case 0: 62 if (bug.x <= 299.2) 63 { 64 bug.dy = JUMP_V; 65 stage++; 66 } 67 break; 68 case 1: 69 bug.dy -= G; 70 if (bug.y <= 29.4) 71 { 72 bug.dy = 0; 73 dz = -SPEED; 74 stage++; 75 } 76 break; 77 case 2: 78 if (bug.z <= 1.5) 79 { 80 bug.dy = JUMP_V; 81 stage++; 82 } 83 break; 84 case 3: 85 bug.dy -= G; 86 if (bug.y <= 26.4) 87 { 88 bug.dy = 0.0; 89 bug.dx = -SPEED; 90 stage++; 91 } 92 break; 93 case 4: 94 if (bug.z <= -3.0) 95 { 96 dz = 0; 97 stage++; 98 } 99 break; 100 default: 101 break; 102 } 103 } 104 105 return true; 106 } 107 108 void load(string[string] s) 109 { 110 bug.load(s); 111 112 if ("bag-bug-dz" in s) 113 dz = s["bag-bug-dz"].to!(float); 114 else 115 { 116 dz = 0.0; 117 bug.dx = -SPEED; 118 } 119 120 if ("bag-bug-frame" in s) 121 frame = s["bag-bug-frame"].to!(long); 122 else 123 frame = -1; 124 125 if ("stage" in s) 126 stage = s["bag-bug-stage"].to!(int); 127 else 128 stage = 0; 129 } 130 131 void save(ref string[string] s) 132 { 133 if (frame >= 0) 134 { 135 bug.save(s); 136 s["bag-bug-dz"] = dz.to!(string); 137 s["bag-bug-frame"] = frame.to!(string); 138 s["bag-bug-stage"] = stage.to!(string); 139 } 140 } 141 }